Fork me on GitHub

『AGC 023A』Zero-Sum Ranges

Problem

Time limit : 2sec / Memory limit : 256MB

我们有一个整数序列A,其长度是N

请找出其总和为0A的非空邻接子序列的数目。请注意,我们正在计算取出子序列的方法。也就是说,即使某些两个子序列的内容相同,如果它们取自不同的位置,则对它们进行单独计数。

door♂

Solution

  • n2的算法会超时

首先看样例

下标 1 2 3 4 5 6
数字 1 3 -4 2 2 -2
前缀和 1 4 0 2 4 2

我们可以发现相同的两个数之间之间经过的数的和一定是0
例如第一个4和第二个4 之间是 4+2+2=0所以我们发现规律:

  • 只要找到相同的数的个数让他们之间两两连接就是个数
    如果和为0代表从第一个开始到它的和就是0所以要额外加上0的个数

懒得离散化就用map,反正能过233

Code:

Click to show/hide the code
-------------本文结束了哦感谢您的阅读-------------